Newer
Older
Ruby / RPG (コピー) / Module_QUESTION.rb
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

module QUESTION

  def question(choices,mold="moji",item="off")
    kaisu = 0
    select = nil
    if mold == "hyozi"
      while kaisu < choices.length
        print("#{choices[kaisu]}\e[m#{item=="off" ? " ": "\n" }")
        kaisu += 1
      end
    else
      while kaisu < choices.length
        print("(#{kaisu+1})#{choices[kaisu]}\e[m#{item=="off" ? " ": "\n" }")
        kaisu += 1
      end
    end
    print item=="off" ? "\n" : ""
    while select.nil? || select > choices.length || select < -choices.length   #回答の仕分け
      print("選択:")
      select = gets.chomp
      if select == "exit"
        exit
      end
      if select == "" || number_check(select) == false || select.to_i > choices.length || select.to_i < -choices.length
        print"\e[1F\e[1M"
        redo
      end
      select = select.to_i
    end
    if mold == "moji"
      if select==0
        return choices[0]
      end
      return choices[select > 0 ? select-1 : select]
    elsif mold == "suji"
      return select
    else
      puts"questionメソッドでバグ"
    end
  end

  def question_number
    n=nil
    while true
      print"数:"
      n =gets.chomp
      if number_check(n)
        return n.to_i
      end
    end
  end

  def number_check(h)
    if h.length>1 && h[0]=="0"
      return false
    end
    if h[0]=="-"
      h=h[1..]
    end
    number = ["1","2","3","4","5","6","6","7","8","9","0"]
    x = h.split("")
    n = 0
    for i in x
      if  false == number.include?(x[n])
        return false
      end
      n += 1
    end
    return true
  end

  def show_hash(raw,mold="string")
    if raw.class != Hash
      p"Module_RPG_Tool.rbのshow_hashでHash以外のデータを検出"
    end
    data=[]
    k=raw.keys
    v=raw.values
    if raw.length==1
      return k[0]+":"+v[0].to_s
    else
      raw.length.times do |n|
        data<<[k[n],v[n]]
      end
    end
    data.length.times do |n|
      data[n]=data[n][0]+":"+data[n][1].to_s
    end
    if mold=="string"
      data=data.join(" ")
    end
    return data
  end

  def number_change(data,mold="change")
    if data.nil? || (not data.instance_of?(String))
      return data
    end
    if data[0] == "-"
      x = data[1..]
    else
      x=data
    end
    if number_check(x)
      return data.to_i
    elsif mold=="change"
      return data
    else
      return false
    end
  end

  def upper_limit_check(data,limit,change=nil)
    if data <= limit
      return data
    else
      if change != nil
        return change
      end
      return false
    end
  end

  def lower_limit_check(data,limit,change=nil)
    if data >= limit
      return data
    else
      if change != nil
        return change
      end
      return false
    end
  end

  def number_range_check(data,lower_limit,upper_limit,change=nil)
    if data.between?(lower_limit,upper_limit)
      return data
    else
      if change != nil
        return change
      end
      return false
    end
  end

  def search(data,ward)
    for i in ward
      if data.include?(i)
        return true
      end
    end
    return false
  end

  def count_data(raw)
    data={}
    x=raw.dup
    while x.length >0
      y=x.shift
      data[y]=raw.count(y)
    end
    return data
  end

  def alphabets_getter(mold="list")
    case mold
    when "list"
      return ["small","large","girisha_small","girisha_large","phonetic"]
    when "small"
      return ("a".."z").to_a
    when "large"
      return ("A".."Z").to_a
    when "girisha_small"
      return ["α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","σ","τ","υ","φ","χ","ψ","ω"]
    when "girisha_large"
      return ["Α","Β","Γ","Δ","Ε","Ζ","Η","Θ","Ι","Κ","Λ","Μ","Ν","Ξ","Ο","Π","Ρ","Σ","Τ","Υ","Φ","Χ","Ψ","Ω"]
    when "phonetic"
      return ["アルファ","ブラボー","チャーリー","デルタ","エコー","フォックスロット","ゴルフ","ホテル","インディア","ジュリエット","キロ","リマ","マイク","ノベンバー","オスカー","パパ","ケペック","ロミオ","シエラ","タンゴ","ユニフォーム","ビクター","ウィスキー","エックスレイ","ヤンキー","ズールー"]
    else
      p"alphabets_getterでerror"
    end
  end

  def numbering(num,mark)
    num+=1
    i=num.to_s(mark.length).split("")
    i.length.times do |n|
      i[n].to_i(mark.length)
      i[n]=mark[i[n].to_i(mark.length)-1]
    end
    return i.join("")
  end

  def ratio_simplify(data)
    answer=data.inject(:gcd)
    data.length.times do |n|
      data[n]=data[n]/answer
    end
    return data
  end

  def hash_roulette(raw)
    y=[]
    for i in raw
      y << i[-1]
    end
    divisor=y.inject(:gcd)
    z=[]
    for i in raw
      z << [i[0],i[1]/divisor]
    end
    data=[]
    for i in z
      data << i[0]*i[1]
    end
    return data.sample
  end

  def number_of(raw)
    if raw.class!=Hash
      p"number_ofの引数がHashではありません"
    end
    data=[]
    for i in raw.to_a
      data<< i[0]+"*"+i[1].to_s
    end
    return data
  end

  def talk(story)
    print"\e[2J\e[0;0H"
    for i in story
      puts i+"\e[0;5m▼"
      print("\e[m")
      gets
      print"\e[2J\e[0;0H"
    end
  end
  
end